package com.martian.service.redis;

import com.martian.common.constant.TokenInfo;
import com.martian.pojo.dto.MovieSimilarDto;
import com.martian.pojo.dto.RecMovieDto;
import com.martian.pojo.dto.UserScanHistoryDto;
import io.swagger.models.auth.In;

import java.util.*;

public interface RedisRepository {
    /**
     * 认证
     * @param tokenInfo
     */
    void saveAccessToken(TokenInfo tokenInfo);

    /**
     * 普通用户登录认证
     * @param tokenInfo
     */
    void saveLoginAccessToken(TokenInfo tokenInfo);
    /**
     * 保存管理员登录认证,value为token
     * @param tokenInfo
     */
    void saveManagerLoginToken(TokenInfo tokenInfo);
    void saveManagerLoginId(TokenInfo tokenInfo);
    /**
     * 查询认证,通过Token查Id
     * @param accessToken
     * @return
     */
    String selectAccessToken(String accessToken);

    /**
     * 查询登录认证
     * @param userId
     * @return
     */
    String selectLoginAccessToken(Integer userId);
    /**
     * 查询管理员登录Token，通过id查token
     */
    String selectManagerLoginToken(Integer managerId);
    /**
     * 查询管理员登录id，通过Token查id
     */
    String selectManagerLoginIdByToken(String accessToken);

    MovieSimilarDto selectSimilarMovieIdsById(Integer movieId);

    /**
     * 删除认证
     * @param accessToken
     */
    void deleteAccessToken(String accessToken);

    /**
     * 删除登录认证
     * @param userId
     */
    void deleteLoginAccessToken(Integer userId);

    void deleteManagerLoginToken(String Token);

    void deleteManagerLoginId(Integer managerId);

    String selectUserEmb(Integer userId);

    String selectMovieItemEmb(Integer movieId);

    String selectMovieDeepWalkEmb(Integer movieId);

    /**
     * 保存用户浏览记录
     * @param movieId
     */
    void saveUserHistory(Integer userId, Integer movieId);

    UserScanHistoryDto selectUserScanHistory(Integer userId);

    Long getNumOfUserHistory(Integer userId);

    void savaMovieSimilars(List<Map.Entry<RecMovieDto,Double>> similarMovies, Integer movieId);
}
